package com.shujia.wyh.day14;

/*
        匿名内部类：
            简单理解：其实它就是内部类的一个简化写法。

        前提：
            前提是要存在一个接口或者是一个类（注意，这里的类可以是具体的类也可以是抽象类）

        匿名内部类的语句格式：
            new 类名或者接口名(){重写方法};
 */
interface Inter{
    public abstract void show1();
    public abstract void show2();
}

class Outer7{
    public void fun(){
//        class Inner7 implements Inter{
//            @Override
//            public void show1() {
//
//            }
//
//            @Override
//            public void show2() {
//
//            }
//        }
//        Inner7 inner7 = new Inner7();

        //这里其实做了两步：
        // 1、创建了一个类实现了Inter接口并重写了接口中的方法
        // 2、创建了该类的对象
        //调用show1()方法
//        new Inter(){
//            @Override
//            public void show1() {
//                System.out.println("这是重写了show1()方法");
//            }
//
//            @Override
//            public void show2() {
//                System.out.println("这是重写了show2()方法");
//            }
//        }.show1();
//
//        //调用show2()方法
//        new Inter(){
//            @Override
//            public void show1() {
//                System.out.println("这是重写了show1()方法");
//            }
//
//            @Override
//            public void show2() {
//                System.out.println("这是重写了show2()方法");
//            }
//        }.show2();

        //假设我现在接口中有很多方法都需要重写和调用
        //按照现在的写法，每调用一次都需要再写一次匿名内部类，非常麻烦
        Inter i = new Inter(){
            @Override
            public void show1() {
                System.out.println("这是重写了show1()方法");
            }

            @Override
            public void show2() {
                System.out.println("这是重写了show2()方法");
            }
        };

        //想调用show1()方法
        i.show1();
        //想调用show2()方法
        i.show2();




    }

}


public class InnerClassDemo7 {
    public static void main(String[] args) {
        Outer7 outer7 = new Outer7();
        outer7.fun();
    }
}
